var calendar = {};

var today = new Date;
var startArr = today.getDate() + "/" + (today.getMonth() + 1) + "/" + today.getFullYear();

var margin = 0;
var actualArr;
var actualDep;
var actDateArr;
var actualDateArr;
var arrActualArr;
var dateActualArr;
var actDateDep;
var actualDateDep;
var startDep;

var calendarEnd = new Date(today.getTime()+365*24*60*60*1000);
calendarEnd = calendarEnd.getDate() + "/" + (calendarEnd.getMonth() + 1) + "/" + calendarEnd.getFullYear();
var calendarEndDep = new Date(today.getTime()+29*24*60*60*1000);
calendarEndDep = calendarEndDep.getDate() + "/" + (calendarEndDep.getMonth() + 1) + "/" + calendarEndDep.getFullYear();

var message_1 = arrLang['Неверная дата'];
var message_2 = arrLang['Неверная дата'];
var message_3 = arrLang['Неверная дата'];

$(document).ready(function() {
	calendar.makeDates('date_arr', 'date_dep');
	calendar.set(startArr, calendarEnd, actualArr, 'date_arr', 'arrDateFunction', message_1, message_2, message_3, 'errorClass');
	calendar.set(startDep, calendarEndDep, actualDep, 'date_dep', 'depDateFunction', message_1, message_2, message_3, 'errorClass');
});

/**
 * Навешиваем datepicker и обработку ручного ввода и ошибок
 */
calendar.set = function(dateStart, dateEnd, dateActual, fieldId, functionName, earlyText, lateText, wrongText, errorClass) {
	
	if (!$('#' + fieldId).length) return !1;
// -- Преобразуем даты --
  dateStart = calendar.makeDate(dateStart);
  dateEnd = calendar.makeDate(dateEnd);
  dateActual = calendar.makeDate(dateActual);
  
// -- Подключаем datepicker -- 
  $('#' + fieldId).datepicker({
		setDate: dateActual,
		dateFormat: 'dd/mm/yy',
		showOn: 'both',
		minDate : dateStart,
		maxDate : dateEnd,
		buttonImage: W_IMAGES + 'icons/cal.png',
		buttonImageOnly: true,
		numberOfMonths: 2,
	 	showButtonPanel: true,
	 	rangeSelect: true,
	 	onSelect: function(date, inst) {
	 		$(this).next().next('.' + errorClass).remove();
	 		window[functionName](date, inst);
	 		//window[functionName]();
	 	}
	}).datepicker('setDate', dateActual);
	// -- Проверка вводимой в поле даты -- 
	$('#' + fieldId).keyup(function() {
		$("#text_" + fieldId).text('');
	  if ($('#' + fieldId).val().length != 10) {
	  	$("#text_" + fieldId).text(wrongText);
	    return !1;
	  }
	  var arrDate = $('#' + fieldId).val().split('/');
	  if (arrDate.length != 3) {
	  	$("#text_" + fieldId).text(wrongText);
	    return !1;
	  }
	  var date = new Date(arrDate[2], arrDate[1] - 1, arrDate[0]);
	  if (date.getTime() < dateStart.getTime()) {
	  	$("#text_" + fieldId).text(earlyText);
	    return !1;
	  }
	  if (date.getTime() > dateEnd.getTime()) {
	  	$("text_" + fieldId).text(lateText);
	    return !1;
	  }
	  window[functionName]($('#' + fieldId).val(), $(this));
	});
};
// -- END of calendar.set -- 

/**
 * Проверка на наличие ошибок
 */
calendar.errorsExist = function(arrErrorClasses) {
	for (var errorClass in arrErrorClasses) {
		if ($('.' + arrErrorClasses[errorClass]).length) return 1;
	}
	return !1;
};

/**
 * Создаем объект даты из строки вида "18/05/2012"
 */
calendar.makeDate = function(date) {
	if (!date) return new Date(0);
  var arrDate = date.split('/');
  return new Date(arrDate[2], arrDate[1] - 1, arrDate[0]);	
};

/**
 * Формируем даты для инициализации datePicker
 */
calendar.makeDates = function(fieldArrId, fieldDepId) {
	// Дата заезда
	if ($('#' + fieldArrId).val()) actualArr = $('#' + fieldArrId).val();
	else actualArr = null;
	if (calendar.makeDate(actualArr).getTime() < new Date().getTime()) {
		actDateArr = today.getTime() + parseInt(margin)*24*60*60*1000;
		actualDateArr = new Date(actDateArr);
		actualArr = actualDateArr.getDate()+ "/" +(actualDateArr.getMonth()+1)+ "/" +actualDateArr.getFullYear();
		//dateActualArr = calendar.makeDate(actualArr);
	}	
	// Дата отъезда
	if ($('#' + fieldDepId).val()) actualDep = $('#' + fieldDepId).val();
	else actualDep = null;
	if (calendar.makeDate(actualDep).getTime() < calendar.makeDate(actualArr).getTime() + 24*60*60*1000) {
		actDateDep = calendar.makeDate(actualArr).getTime() + 24*60*60*1000;
		actualDateDep = new Date(actDateDep);
		actualDep = actualDateDep.getDate() + "/" + (actualDateDep.getMonth()+1) + "/" + actualDateDep.getFullYear();
	}
	// Дата начала отсчета для отъезда (дата заезда + 1 день)
	var startDateDep = calendar.makeDate(actualArr);
	startDateDep = new Date(startDateDep.getTime() + 24 * 60 * 60 * 1000);
	startDep = startDateDep.getDate() + "/" + (startDateDep.getMonth()+1) + "/" + startDateDep.getFullYear();
	calendarEndDep = new Date(startDateDep.getTime()+29*24*60*60*1000);
	calendarEndDep = calendarEndDep.getDate() + "/" + (calendarEndDep.getMonth() + 1) + "/" + calendarEndDep.getFullYear();
	
	
};

/**
 * Функция для обработки выбора даты заезда 
 * @param date - выбранная дата
 * @param object - объект datepicker
 */
function arrDateFunction(date, object) {
	var arrDate = new Date(object.currentYear, object.currentMonth, object.currentDay);
	var fieldId = (object.id.substr(0, object.id.length - 3) + 'dep');
	var depDate = calendar.makeDate($('#' + fieldId).val());
	var dep_time = arrDate.getTime() + 24 * 60 * 60 * 1000;	
	if (dep_time > depDate.getTime()) depDate = new Date(dep_time);
	var dateStart = calendar.makeDate($('#' + object.id).val());
  dateStart = new Date(dateStart.getTime() + 24 * 60 * 60 * 1000);
  var dateEnd = new Date(dateStart.getTime() + 24 * 60 * 60 * 1000 * 29);
  // Меняем дату и начало отсчета для даты отъезда
	$('#' + fieldId).val('').datepicker('option', 'minDate', dateStart).datepicker('setDate', depDate)
	.datepicker('option', 'maxDate', dateEnd);
};
function depDateFunction(){};
